package Utils;

import java.util.HashMap;
import javax.servlet.jsp.jstl.core.*;

/**
 *
 * @author Daniel
 */
public class StudyPlan {
    
    private int anno , crediti_esterni , crediti_interni , crediti_interni_necessari , crediti_necessari;
    private int corsi_approvati , corsi_totali;
    private boolean approvato = false;
    private boolean valido = false;
    private HashMap  plan;
    private boolean modificabile = false;
    
    public boolean isModificabile() {
        return modificabile;
    }
   
    public void setModificabile(boolean modificabile) {
        this.modificabile = modificabile;
    }

    public StudyPlan() {
        super();
    }
      
    
    public StudyPlan(int anno){
        this.anno = anno; 
        crediti_esterni = 0;
        crediti_interni = 0;
        crediti_interni_necessari = 18;
        crediti_necessari = 30; 
        corsi_approvati = 0;
        corsi_totali = 0;
        plan = new HashMap(25);        
    }

    public boolean contiene(int id)
       {
           return plan.containsKey(id);  
       }    
    
    public boolean corsoEsterno(int id)
         {
             if(((CorsoPlan)plan.get(id)).isEsterno())
                 return true;
             else 
                 return false;
         }   
    
    public boolean rimuoviCorso(User user , int id){
        if(!plan.containsKey(id))
            return false;
        CorsoPlan corso = (CorsoPlan) plan.get(id);
        
        if(corso.isEsterno())
            crediti_esterni = crediti_esterni - corso.getCrediti();
        else
            crediti_interni = crediti_interni - corso.getCrediti();
        
        corsi_totali--;
        if(corso.isApprovato())
            corsi_approvati--;
        
        plan.remove(id);
       
        controlloValido();      
        
        return true;
        //return Query_Studente.rimuovi_corso_plan_database(user, id);
        
    }
    
    public boolean aggiungi_nuovo_corso(User user , Corso corso)
         {

            CorsoPlan x = new CorsoPlan();
            try
                 {

            x.setCrediti(Integer.parseInt(corso.getCrediti()));
            x.setNome(corso.getDocente());
            x.setEmail(corso.getEmail());
            x.setEsterno(corso.isEsterno());
            x.setId(corso.getId());
            x.setNome(corso.getNome());
            x.setPeriodo(corso.getPeriodo());
            x.setUrl(corso.getUrl_corso());
                  }
             catch(Exception e){ 
                 return false;
             }
                    if(aggiungiCorso(x.getId() , x))
                            return true;
                    else
                        return false;
                        //return Query_Studente.aggiungi_corso_plan_database(user, x);
            
         }
    
    public boolean aggiungi_autocertificazione(User user , int id , String voto)
         {
            if(!plan.containsKey(id))
             return false;
            ((CorsoPlan) plan.get(id)).setVoto(voto);
            return true; 
            //return Query_Studente.autocertifica_voto_database(user, id, voto);
         } 
            
    
    public boolean aggiungiCorso(int id , CorsoPlan corso){
        if(plan.containsKey(id))
              return false;
        if(corso.isEsterno())
            crediti_esterni = crediti_esterni + corso.getCrediti();
        else
            crediti_interni = crediti_interni + corso.getCrediti();
        
        if(corso.isApprovato())
            corsi_approvati ++;
        corsi_totali++;
        
        plan.put(id, corso);
        
        controlloValido(); 
        return true;
    }

    private void controlloValido() {
        
        if(crediti_interni < crediti_interni_necessari)
            {
                valido = false;
                return;
            }
        if(crediti_interni+crediti_esterni < crediti_necessari)
           {
               valido = false;
               return;
           } 
        valido = true;
        
        if((valido == true) && (corsi_approvati == corsi_totali)  )
            approvato = true;
        else
            approvato = false;
      
    }

    public HashMap getPlan() {
        return plan;
    }

    public void setPlan(HashMap plan) {
        this.plan = plan;
    }

    public int getAnno() {
        return anno;
    }

    public void setAnno(int anno) {
        this.anno = anno;
    }

    public boolean isApprovato() {
        return approvato;
    }

    public void setApprovato(boolean approvato) {
        this.approvato = approvato;
    }

    public int getCrediti_esterni() {
        return crediti_esterni;
    }

    public void setCrediti_esterni(int crediti_esterni) {
        this.crediti_esterni = crediti_esterni;
    }

    public int getCrediti_interni() {
        return crediti_interni;
    }

    public void setCrediti_interni(int crediti_interni) {
        this.crediti_interni = crediti_interni;
    }

    public int getCrediti_interni_necessari() {
        return crediti_interni_necessari;
    }

    public void setCrediti_interni_necessari(int crediti_interni_necessari) {
        this.crediti_interni_necessari = crediti_interni_necessari;
    }

    public int getCrediti_necessari() {
        return crediti_necessari;
    }

    public void setCrediti_necessari(int crediti_necessari) {
        this.crediti_necessari = crediti_necessari;
    }

    public boolean isValido() {
        return valido;
    }

    public void setValido(boolean valido) {
        this.valido = valido;
    }
            
          
    
    
    
    
    
}
